/**
 * Realtime Config 模块 API
 * 实时配置相关接口
 */

import { request, type ApiResponse } from "../request";

// ============ 类型定义 ============

/**
 * 实时配置响应
 */
export interface RealtimeConfigResponse {
	/** 是否只允许私有频道 */
	private_only: boolean | null;
	/** Realtime 授权连接池大小 */
	connection_pool: number | null;
	/** 最大并发用户数限制 */
	max_concurrent_users: number | null;
	/** 每秒每频道最大事件数限制 */
	max_events_per_second: number | null;
	/** 每秒每频道最大字节数限制 */
	max_bytes_per_second: number | null;
	/** 每客户端最大频道数限制 */
	max_channels_per_client: number | null;
	/** 每秒最大加入数限制 */
	max_joins_per_second: number | null;
	/** 每秒最大 Presence 事件数限制 */
	max_presence_events_per_second: number | null;
	/** 最大有效负载大小限制（KB） */
	max_payload_size_in_kb: number | null;
	/** 是否暂停 Realtime */
	suspend: boolean | null;
}

/**
 * 更新实时配置请求体
 */
export interface UpdateRealtimeConfigBody {
	/** 是否只允许私有频道 */
	private_only?: boolean;
	/** Realtime 授权连接池大小 */
	connection_pool?: number;
	/** 最大并发用户数限制 */
	max_concurrent_users?: number;
	/** 每秒每频道最大事件数限制 */
	max_events_per_second?: number;
	/** 每秒每频道最大字节数限制 */
	max_bytes_per_second?: number;
	/** 每客户端最大频道数限制 */
	max_channels_per_client?: number;
	/** 每秒最大加入数限制 */
	max_joins_per_second?: number;
	/** 每秒最大 Presence 事件数限制 */
	max_presence_events_per_second?: number;
	/** 最大有效负载大小限制（KB） */
	max_payload_size_in_kb?: number;
	/** 是否暂停 Realtime */
	suspend?: boolean;
}

// ============ API 方法 ============

/**
 * 获取 Realtime 配置
 */
export function getRealtimeConfig(
	ref: string
): Promise<ApiResponse<RealtimeConfigResponse>> {
	return request.get<RealtimeConfigResponse>(
		`/v1/projects/${ref}/config/realtime`
	);
}

/**
 * 更新 Realtime 配置
 */
export function updateRealtimeConfig(
	ref: string,
	data: UpdateRealtimeConfigBody
): Promise<ApiResponse<Record<string, unknown>>> {
	return request.patch<Record<string, unknown>>(
		`/v1/projects/${ref}/config/realtime`,
		data
	);
}

export default {
	getRealtimeConfig,
	updateRealtimeConfig
};
